iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

ASP.NET MVC5從入門到退坑系列 第 13

[Day13]網址路由詳解

  • 分享至 

  • xImage
  •  

在第五天的時候有大致上講過路由,但只是一個基本概念,今天這篇將會對路由每個參數及屬性深入探討


路由設定檔-RouteConfig.cs

https://ithelp.ithome.com.tw/upload/images/20200913/20123028qNNNyQLLow.jpg

1.RegisterRoute(RouteCollection routes)

這是執行Web的入口點,會接收從Global.asax傳來的RouteTable.Routes的靜態方法

2.IgnoreRoute()

用來定義不要透過網址路由處理的網址,將不會進入MVC的執行生命週期,將由IIS的其他HTTP模組處理

3.{resource}.axd

resource代表一個RouteValue的路由變數名稱,可以取任何名字替代,就只是代表一個位置而已

{resource}.axd代表意思是所有*.axd的網址都不透過MVC來執行,例如Web Form就是常見的.axd,所以必須排除

4.{pathInfo}

也是一個路由變數名稱,定義的意思是只要網址有.axd,後面出現的任何路經都直接跳過

5.MapRoute

用來定義網址路由擴充方法

6.name

定義Route名稱,預設是Default

7.url

定義url樣式與路徑段落的參數名稱,例如/Home/Index/1111

8.defaults

當網址路由比對不到網址會進入到這裡嘗試比對是否有符合的Controller與Action可以執行

URL與路由的比對

1.比對的順序是由上而下逐一比對

ex:http://127.0.0.1/abc.axd

此URL在IgnoreRoute比對成功,將不會丟給MVC執行,會重新返回給IIS的其他HTTP模組

ex:http://127.0.0.1/Home/details?id=0001

此URL在IgnoreRoute沒有比對成功所以會進入到MapRoute(),Controller/Action/都比對成功但因?id=0001是QueryString不屬於路由範圍,所以路由會比對default的設定,也就是UrlParameter.Optional,所以最終會比對成功進入MVC執行週期

2.MapRoute的條件約束

在MapRoute可以加上第四個參數constraints來限制路由條件

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                constraints: new {id=@"\d+"}//id參數只接受數字
            );

上一篇
[Day12]Razor語法規則
下一篇
[Day14]Model的職責
系列文
ASP.NET MVC5從入門到退坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言